package Model;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class ProdutoDAO {

    /*
    int nCodProduto;
    String sDescProduto;
    String sMarca;
    int nQuantidade;
    double dPeso;
    int nCodEan;
    double dPrecoCusto;
    double dPrecoVenda;
    */

    public ArrayList<ProdutoBO> lista_produtos_com_filtro(String coluna_filtro, String texto_filtro) {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "select * from tb_produto where " + coluna_filtro
                    + " like '%" + texto_filtro + "%';";

            ResultSet resultado = executorSQL.executeQuery(SQL);
            ArrayList<ProdutoBO> lista = new ArrayList<ProdutoBO>();
            while (resultado.next()) {
                ProdutoBO prod = new ProdutoBO(resultado.getInt("nCodProduto"),
                        resultado.getString("sDescProduto"),
                        resultado.getString("sMarca"),
                        resultado.getInt("nQuantidade"),
                        resultado.getDouble("dPeso"),
                        resultado.getInt("nCodEan"),
                        resultado.getDouble("dPrecoCusto"),
                        resultado.getDouble("dPrecoVenda"));
                lista.add(prod);
            }
            executorSQL.close();
            return lista;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ProdutosDAO.lista_produtos-Erro: " + e.getMessage());
            return new ArrayList<ProdutoBO>();
        }
    }

    public ArrayList<ProdutoBO> lista_produtos() {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "select * from tb_produto;";
            ResultSet resultado = executorSQL.executeQuery(SQL);
            ArrayList<ProdutoBO> lista = new ArrayList<ProdutoBO>();
            while (resultado.next()) {
                ProdutoBO prod = new ProdutoBO(resultado.getInt("nCodProduto"),
                        resultado.getString("sDescProduto"),
                        resultado.getString("sMarca"),
                        resultado.getInt("nQuantidade"),
                        resultado.getDouble("dPeso"),
                        resultado.getInt("nCodEan"),
                        resultado.getDouble("dPrecoCusto"),
                        resultado.getDouble("dPrecoVenda"));
                lista.add(prod);
            }
            executorSQL.close();
            return lista;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ProdutosDAO.lista_produtos-Erro: " + e.getMessage());
            return new ArrayList<ProdutoBO>();
        }
    }

    public boolean insere_produto(ProdutoBO prod) {
        Connection conexao;
        Statement executorSQL;
        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();
            
            String SQL = "insert into tb_produto (nCodProduto,sDescProduto,sMarca,nQuantidade,dPeso,nCodEan,dPrecoCusto,dPrecoVenda) "
                    + "values(" + prod.getNCodProduto() + ",'"
                    + prod.getSDescProduto() + "','"
                    + prod.getSMarca() + "',"
                    + prod.getNQuantidade() + ","
                    + prod.getDPeso() + ","
                    + prod.getNCodEan() + ","
                    + prod.getDPrecoCusto() + ","
                    + prod.getDPrecoVenda() + ");";
            System.out.println("Comando SQL: " + SQL);
            executorSQL.execute(SQL);
            executorSQL.close();
            return true;
        } catch (Exception e) {
            //JOptionPane.showMessageDialog(null, "ProdutosDAO.Insere_Produtos-Erro: " + e.getMessage());
            JOptionPane.showMessageDialog(null, "Insira todos os Dados obrigatorios.");
            return false;
        }

    }

    public boolean exclui_produto(ProdutoBO prod) {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();

            String SQL = "delete from tb_produto where nCodProduto = " + prod.getNCodProduto() + ";";

            System.out.println("Comando SQL: " + SQL);
            boolean resultado = executorSQL.execute(SQL);

            executorSQL.close();
            return resultado;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ProdutosDAO.Insere_Produtos-Erro: " + e.getMessage());
            return false;
        }
    }

    public boolean atualiza_produto(ProdutoBO prod) {
        Connection conexao;
        Statement executorSQL;

        try {
            conexao = ConexaoSingleton.getInstance().getConnection();
            executorSQL = conexao.createStatement();
            
            String SQL = "update tb_produto set sDescProduto='" + prod.getSDescProduto()
                    + "',sMarca='" + prod.getSMarca()
                    + "',nQuantidade=" + prod.getNQuantidade()
                    + ",dPeso=" + prod.getDPeso()
                    + ",nCodEan=" + prod.getNCodEan()
                    + ",dPrecoCusto=" + prod.getDPrecoCusto()
                    + ",dPrecoVenda=" + prod.getDPrecoVenda()
                    + " where nCodProduto=" + prod.getNCodProduto() + ";";

            System.out.println("Comando SQL: " + SQL);
            boolean resultado = executorSQL.execute(SQL);

            executorSQL.close();
            return resultado;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "ProdutosDAO.atualiza_produtos-Erro: " + e.getMessage());
            return false;
        }
    }
}
